package modelo.controles.tests;

import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Iterator;

import org.junit.Test;

import modelo.carrera.Conductor;
import modelo.comportamiento.Accion;
import modelo.comportamiento.Comportamiento;
import modelo.comportamiento.Conciencia;
import modelo.comportamiento.acciones.Acelerar;
import modelo.controles.Control;
import modelo.controles.Policia;
import modelo.escenario.Ciudad;
import modelo.geometria.Vector;
import modelo.obstaculos.Obstaculo;
import modelo.seniales.Semaforo;
import modelo.vehiculos.Automovil;
import modelo.vehiculos.SentidoVehiculo;

public class TestPolicia {

	@Test
	public void TestPolicia_VehiculoSemaforoRojo_GeneraInfraccion() {

		Conductor conductor = new Conductor(new Comportamiento(new Conciencia()));
		SentidoVehiculo sentidoVehiculo = SentidoVehiculo.NORTE;
		Automovil auto = new Automovil(conductor, new Vector(23,10), new Vector(23,30), sentidoVehiculo, 3, 2,0,100,10,10);
		auto.manejar(new Acelerar(80, 100));
		
		//Semaforo en rojo de Chile y Paseo Colon
		Iterator<Obstaculo> itr = Ciudad.getCiudad().getGrilla().get(new Vector(27,13)).iterator();
		while (itr.hasNext()){
				Obstaculo e = itr.next();
				if (e instanceof Semaforo){
					Semaforo semaforo = (Semaforo)e;
					semaforo.setRojo();
				}
		}
	
		ArrayList<Control> controles = Ciudad.getCiudad().getControles();
		for (Control control : controles){
			if (control instanceof Policia)
				control.analizar(auto);
		}
		
		assertTrue(auto.hasInfracciones());
	}
}
